/*
 * Estado
 *
 * sin P          obtenerDatosArticuloCampania - Esteban falta un metodo en articuloDAL
 *                  el metodo se llama "obtenerCategoriaArticulo" y despues ya esta..
 * sin P          obtenerArticulosRelacionados - Esteban
 */

package gestores.pagina;

import dal.ArticuloDAL;
import dal.CampaniaDAL;

import dal.ClienteDAL;

import excepciones.AvwException;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import negocio.ArticuloAsociado;

import negocio.ArticuloCampania;
import negocio.ArticuloWeb;

import negocio.CampaniaWeb;

import negocio.CategoriaArticulo;
import negocio.CategoriaWeb;
import negocio.Cliente;
import negocio.DocumentoArticuloWeb;
import negocio.FotoArticuloWeb;

import negocio.Marca;

import util.Email;
import util.FuncionGestores;
import util.Recurso;
import util.Utiles;

public class GestorConsultaArticulo {

    static final Logger logger = 
        Utiles.iniciarLogger("GestorConsultaArticulo", false);

    public GestorConsultaArticulo() {
    }

    /**
     * 
     * @param camCodigo
     * @param artCodigo
     * @return los siguientes datos del articulo en un HasshMap: "artCodigo" codigo, 
     * "cawNombre" categoria, "marNombre" nombre de marca, "artNombre" nombre, 
     * "artDescripcion" descripcion, "arcPrecioLista" precio lista, 
     * "arcPrecioDescuento" precio descuento, "fotoArticuloWeb" es un arrayList con 
     * HashMaps("fawCodigo" codigo y "fawDescripcion" descripcion de las fotos),
     * es un arrayList con HashMaps ("dawCodigo" codigo y "dawDescripcion" descripcion de los documentos) 
     * y el nombre "cruNombre" y valor "carValor" de las caracteristicas 
     * tecnicas del articulo.
     */
    public static HashMap obtenerDatosArticuloCampania(String camCodigo, 
                                                       String artCodigo) throws AvwException {
        logger.info("artCodigo: " + artCodigo);                                                                                
        ArticuloWeb articuloWeb = new ArticuloWeb(artCodigo);
        logger.info("camCodigo: " + camCodigo);                                                                                
        CampaniaWeb campaniaWeb = new CampaniaWeb(camCodigo);
        ArticuloCampania articuloCampania = new ArticuloCampania();
        HashMap articuloHash = new HashMap();
        logger.info("Va a obtenerArticuloCampania");
        articuloCampania = 
                ArticuloDAL.obtenerArticuloCampania(campaniaWeb, articuloWeb);
        logger.info("Devuelve el articulo");
        articuloWeb = articuloCampania.getArcArticulo();
        /*Incremento la consulta*/
        logger.info("Incrementa consulta");
        articuloCampania.incrementarConsulta();
        /*Modifico el ArticuloCampania*/
        logger.info("Modificar Articulo Campania");
        ArticuloDAL.modificarArticuloCampania(articuloCampania, campaniaWeb);
        logger.info("Obtiene datos completos");
        articuloHash = articuloWeb.obtenerDatosCompletos();
        logger.info("Precio lista: "+articuloCampania.getArcPrecioLista());
        articuloHash.put("arcPrecioLista", 
                         articuloCampania.getArcPrecioLista());
        logger.info("Precio Descuento: "+articuloCampania.getArcPrecioDescuento());
        articuloHash.put("arcPrecioDescuento", 
                         articuloCampania.getArcPrecioDescuento());
        if (articuloHash == null) {
            logger.info("articuloHash  es nulo. Lanza exception.");
            throw new AvwException("articuloHash  es nulo");
        }
        return articuloHash;
    }

    /**
     * 
     * @param camCodigo codigo de la campania
     * @param artCodigo codigo del articulo
     * @return los siguientes datos del articulo en un arrayList de HashMap: 
     * "artCodigo" codigo, "fotoArticuloWeb" es un arrayList con 
     * HashMaps("fawCodigo" codigo y "fawDescripcion" descripcion de las fotos) 
     * "cawNombre" categoria, "marNombre" marca, "artNombre" nombre,
     * "artDescripcion" descripcion, "arcPrecioLista" precio lista, 
     * "arcPrecioDescuento" precio descuento
     * 
     */
    public static ArrayList<HashMap> obtenerArticulosRelacionados(String camCodigo, 
                                                                  String artCodigo) throws NullPointerException, 
                                                                                           AvwException {
        ArticuloDAL articuloDal = new ArticuloDAL();
        ArticuloWeb articuloWeb = new ArticuloWeb(artCodigo);
        CampaniaWeb campaniaWeb = new CampaniaWeb(camCodigo);

        ArrayList<CategoriaWeb> categorias = new ArrayList<CategoriaWeb>();
        ArrayList<HashMap> articulosWeb = new ArrayList<HashMap>();
        
        ArrayList<ArticuloAsociado> articulos = 
                new ArrayList<ArticuloAsociado>();

        articulos = ArticuloDAL.listarArticulosAsociadosPorCampania(articuloWeb, campaniaWeb);


        for (ArticuloAsociado articulo: articulos) {
            HashMap articuloHash = new HashMap();
            articuloHash = articulo.getArasArticuloCampania().getArcArticulo().obtenerDatosResumen();            

            articuloHash.put("arcPrecioDescuento", 
                             articulo.getArasArticuloCampania().getArcPrecioDescuento());
            articuloHash.put("arasTitulo", articulo.getArasTitulo());
            articulosWeb.add(articuloHash);
        }
        return articulosWeb;
    }
    
    /**
     * obtiene las categorias padres y abuelas del articulo pasado por parametro
     * @param ArticuloWeb al que se le quiere buscar la CategoriaWeb padre y el abuelo
     * @return ArrayList de HashMap con los datos (cawNombre y cawCodigo)
     * de las categorias familiares  
     **/
    public static ArrayList<HashMap> obtenerCategoriasPadres(String  artCodigo)
            throws AvwException{
        ArticuloWeb articuloWeb = new ArticuloWeb(artCodigo);
        CategoriaWeb categoriaPadre = new CategoriaWeb();
        categoriaPadre = articuloWeb.getArwCategoria();
        CategoriaWeb categoriaAbuelo = categoriaPadre.getCawCategoriaPadre();
        HashMap categoriaPadreHash = new HashMap();
        ArrayList<HashMap> array = new ArrayList<HashMap>();
        categoriaPadreHash.put("cawCodigo", categoriaPadre.getCawCodigo());
        categoriaPadreHash.put("cawNombre", categoriaPadre.getCawNombre());
        
        HashMap categoriaAbueloHash = new HashMap();
        categoriaAbueloHash.put("cawCodigo", categoriaAbuelo.getCawCodigo());
        categoriaAbueloHash.put("cawNombre", categoriaAbuelo.getCawNombre());
        /*Agrego la categoria abuelo del articulo*/
        array.add(categoriaAbueloHash);
        /*Agrego la categoria padre del articulo*/
        array.add(categoriaPadreHash);
        
        return array;
    }

    /**
     * 
     * Envia un mail al amigo, con el mensaje ingresado por el cliente, 
     * una foto, marca, nombre y precio del producto, junto con un link 
     * para consultar el producto.
     * @param camCodigo Codigo de la campania
     * @param artCodigo Codigo del articulo
     * @param cliNombre Nombre del cliente que desea recomendar
     * @param cliMail Mail del cliente que desea recomendar
     * @param nombreAmigo Nombre del amigo al que se le recomienda
     * @param mailAmigo Mail del amigo al que se le recomienda
     * @param mensaje Mensaje que envia el cliente al recomendado
     */
    public static void recomendar(String microCodigo,String camCodigo, String artCodigo, 
                                  String cliNombre, String cliMail, 
                                  String nombreAmigo, String mailAmigo, 
                                  String mensaje, String telefono) throws AvwException {

        ArticuloWeb articuloWeb;
        FotoArticuloWeb foto = new FotoArticuloWeb();
        ArticuloCampania articuloCampania = new ArticuloCampania();

        articuloCampania = 
                ArticuloDAL.obtenerArticuloCampania(new CampaniaWeb(camCodigo), 
                                                    new ArticuloWeb(artCodigo));

        articuloWeb = articuloCampania.getArcArticulo();
        
        HashMap articuloHash = new HashMap();
        articuloHash = articuloWeb.obtenerDatosResumen();
        
        Email email = new Email();
        if (articuloWeb.getArwFotos().size() > 0){
            foto = articuloWeb.getArwFotos().get(0);
        }else{
            foto.setFawCodigo("sinFoto");
        }        
        StringBuilder html = new StringBuilder();
        
        html.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
        html.append("<head>");
        html.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\" />");
        html.append("<title>.:Recomendados - Empire Tech:.</title>");
        html.append("<style type=\"text/css\">");

        html.append("body {");
        html.append("	margin-left: 0px;");
        html.append("	margin-top: 0px;");
        html.append("	margin-right: 0px;");
        html.append("	margin-bottom: 0px;");
        html.append("	background: #F0F0F0;");
        html.append("	padding-top: 25px;");
        html.append("}");

        html.append("a:link {");
        html.append("	text-decoration: none;");
        html.append("	color: #000000;");
        html.append("}");

        html.append("a:hover {");
        html.append("	text-decoration: underline;");
        html.append("	color: #F4811F;");
        html.append("}");

        html.append("a:visited {");
        html.append("	text-decoration: none;");
        html.append("	color: #A0A0A0;");
        html.append("}");

        html.append(".fondo {");
        html.append("	background: #F0F0F0;;");
        html.append("	height: 320px;");
        html.append("	width: 300px;");
        html.append("}");

        html.append(".separador  {");
	html.append("width:280px;");
	html.append("padding-bottom:10px;");
        html.append("}");

        html.append(".fondoMedio  {");
	html.append("width:300px;");
	html.append("vertical-align: top;");
        html.append("}");
        
        html.append(".tablaMedia {");
        html.append("	width:180px;");
        html.append("	height: 140px;");
        html.append("	background: #FFFFFF;");
        html.append("	border-right: 1px solid #CCCCCC;;");
        html.append("	padding: 8px 5px 8px 5px;");
        html.append("}");

        html.append(".titulo  {");
        html.append("	font-family: Verdana, Arial, Helvetica, sans-serif;");
        html.append("	font-weight: normal;");
        html.append("	font-size: 10px;");
        html.append("	text-align: left;");
        html.append("	color: #000000;");
        html.append("	padding-left: 10px;");
        html.append("	vertical-align: middle;");
        html.append("	padding-top:5px;");
        html.append("}");
        
        html.append(".mensaje  {");
	html.append("   font-family: Verdana, Arial, Helvetica, sans-serif;");
        html.append("   font-weight: bold;");
	html.append("   font-size: 9px;");
	html.append("   text-align: center;");
	html.append("   color: #000000;");
	html.append("   padding-left: 10px;");
	html.append("   vertical-align: middle;");
        html.append("}");

        html.append(".tituloArticulo  {");
        html.append("	font-family: Verdana, Arial, Helvetica, sans-serif;");
        html.append("	font-weight: bold;");
        html.append("	font-size: 10px;");
        html.append("	text-align: center;");
        html.append("	color: #000000;");
        html.append("	vertical-align: middle;");
        html.append("	text-transform: uppercase; ");
        html.append("}");
        
        html.append(".precio  {");
        html.append("	font-family: Verdana, Arial, Helvetica, sans-serif;");
        html.append("	font-weight: bold;");
        html.append("	text-align:center;");
        html.append("	font-size: 12px;");
        html.append("	color: #FF0000;");
        html.append("}");
        
        html.append(".telefono  {");
        html.append("	font-family: Verdana, Arial, Helvetica, sans-serif;");
        html.append("	font-weight: bold;");
        html.append("	font-size: 15px;");
        html.append("	color: #F4811F;");
        html.append("}");
        
        html.append(".accion {");
        html.append("	font-family: Verdana, Arial, Helvetica, sans-serif;");
        html.append("	text-align:center;");
        html.append("	font-size: 11px;");
        html.append("	color: #000000;");
        html.append("	padding-top:0px;");
        html.append("	padding-bottom:10px;");
        html.append("}");
        
        html.append("</style>");

        html.append("</head>");

        html.append("<body>");

        html.append("<div align=\"center\">");
        html.append("  <table cellpadding=\"0\" cellspacing=\"0\" class=\"fondo\">");
        html.append("    <tr>");
        html.append("      <td><p class=\"titulo\">Tu amigo <strong>"+cliNombre+"</strong> te Recomienda el siguiente producto:</p></td>");
        html.append("    </tr>");
        html.append("    <tr>");
        html.append("      <td class=\"mensaje\"><p>"+mensaje+"</p>");
	html.append("      </td>");
        html.append("    </tr>");
        html.append("    <tr>");
        html.append("      <td class=\"separador\"><div align=\"center\"><img src=\"http://empiretech.com.ar/micros/vistas/pagina/imagenes/separador.jpg\" width=\"280\" height=\"1\" border=\"0\" /></div></td>");
        html.append("    </tr>");
        html.append("<tr class=\"fondoMedio\">");
        html.append("<td><table align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tablaMedia\">");
        html.append("          <tr>");
        html.append("            <td colspan=\"2\" class=\"tituloArticulo\"><a href=\"http://empiretech.com.ar/micros/index?micro="+microCodigo+"&accion=articulo&art="+articuloHash.get("artCodigo")+"\">"+articuloHash.get("artNombre")+"</a></td>");
        html.append("         </tr>");
        html.append("          <tr>");
        html.append("            <td colspan=\"2\"><div align=\"center\"><a href=\"http://empiretech.com.ar/micros/index?micro="+microCodigo+"&accion=articulo&art="+articuloHash.get("artCodigo")+"\"><img src=\"http://empiretech.com.ar/micros/img/articulos/"+foto.getFawCodigo()+".jpg\" width=\"90\" height=\"90\" border=\"0\" /></a></div></td>");
        html.append("          </tr>");
        html.append("          <tr>");
        html.append("            <td><div align=\"center\"><a href=\"http://empiretech.com.ar/micros/index?micro="+microCodigo+"&accion=articulo&art="+articuloHash.get("artCodigo")+"\"><img src=\"http://empiretech.com.ar/micros/vistas/pagina/imagenes/masInfo.jpg\" width=\"73\" height=\"17\" border=\"0\" /></a></div></td>");
        html.append("            <td class=\"precio\">"+articuloCampania.getArcPrecioDescuento().toString()+"</td>");
        html.append("          </tr>");
        html.append("      </table></td>");
        html.append("    </tr>");
        html.append("    <tr>");
        html.append("     <td ><div align=\"center\"><a href=\"http://empiretech.com.ar\"><img src=\"http://empiretech.com.ar/micros/vistas/pagina/imagenes/fondoLogo.jpg\" width=\"180\" height=\"80\" border=\"0\" /></a></div></td>");
        html.append("    </tr>");   
        html.append("    <tr>");
        html.append("     <td  class=\"accion\"><a href=\"http://empiretech.com.ar/micros/index?micro="+microCodigo+"&accion=principal\">www.empiretech.com.ar/" +
                "</a></td>");
        html.append("    </tr>");
        html.append("    <tr>");
        html.append("      <td  class=\"titulo\"><strong>Compr&aacute; por tel&eacute;fono</strong><br />");
        html.append("        de Lunes a viernes de 8 a 20 hs. al:<br />");
        html.append("      <span class=\"telefono\">"+telefono+"</span></td>");
        html.append("    </tr>");
        html.append("    <tr>");
        html.append("      <td  class=\"titulo\"><div align=\"right\"><img src=\"http://empiretech.com.ar/micros/vistas/pagina/imagenes/tarjetas.jpg\" width=\"100\" height=\"36\" /></div></td>");
        html.append("    </tr>");
        html.append("  </table>");
        html.append("</div>");
        
        html.append("</body>");
        
        html.append("</html>");
        
        String origen = new Recurso("mail.properties").obtenerPropiedad("mailDefault");
        if(mensaje == null || mensaje.equals("") ){
            mensaje = new Recurso("mail.properties").obtenerPropiedad("mensajeRecomendarDefault");
            
        }
        email.enviarEmailHTML(origen, mailAmigo, cliNombre, nombreAmigo, 
                              "Recomendacion", "", html.toString());

    }

    /**
     * 
     * @param cliCodigo
     * @param cliNombre
     * @param camCodigo
     * @param artCodigo
     * @param horario
     * @param cliTelefono
     */
    public static void recibirLlamado(String cliCodigo, String cliNombre, String camCodigo, 
                                      String nomMicro, String artCodigo, String horario, 
                                      String cliTelefono) throws AvwException {
        ArticuloCampania articuloCampania = new ArticuloCampania();
        Cliente cliente = new Cliente(cliCodigo);
        Recurso r = new Recurso("mail.properties");
        try {
            cliente = ClienteDAL.obtenerCliente(cliente);
        } catch (AvwException e) {
            logger.log(Level.SEVERE, e.getMensaje(), e);
        }
        Email email = new Email();
        StringBuilder mensaje = new StringBuilder();


        articuloCampania = 
                ArticuloDAL.obtenerArticuloCampania(new CampaniaWeb(camCodigo), 
                                                    new ArticuloWeb(artCodigo));


        mensaje.append("El cliente: ");
        mensaje.append(cliNombre);
        mensaje.append("\n quiere que lo llamen por el Telefono, ");
        mensaje.append("al numero: ");
        mensaje.append(cliTelefono);
        mensaje.append("\n a las: ");
        mensaje.append(horario);
        mensaje.append("\n consultando por el producto: ");
        mensaje.append( " codigo: " + articuloCampania.getArcArticulo().getArtCodigo());
        mensaje.append(" - ");
        mensaje.append(" nombre: " + articuloCampania.getArcArticulo().getArtNombre());
        mensaje.append("\n de la campania codigo: ");
        mensaje.append(camCodigo);
        
        email.enviarEmailSimple(cliente.getCliEmail(), r.obtenerPropiedad("mailVentas"), 
                                cliente.getCliNombre(), "", 
                                 r.obtenerPropiedad("tituloLlamado") +nomMicro, 
                                mensaje.toString());

    }
    
    /**
     * Verifica si los articulos pasados por parametros tienen igual categoria web.
     * @param ArrayList<HashMap> con key "cawCodigo"
     * @return boolean
     **/
    public static boolean verificaIgualdadCategoriaWeb(ArrayList<HashMap> articulos){
        String caw = null;
        for(HashMap articulo: articulos){
            if (caw == null){
                caw = articulo.get("cawCodigo").toString();
            }
            if (!caw.equals(articulo.get("cawCodigo").toString())){
                caw = articulo.get("cawCodigo").toString();
                return false;
            }            
        }
        
        return false;
    }
}
